iT邦幫忙

2023 iThome 鐵人賽

DAY 14
0
自我挑戰組

一天學一篇 Google Codelabs系列 第 14

112/14 - Compose 基礎知識 - 實作遷移作業(下)

  • 分享至 

  • xImage
  •  

今天學什麼?

今天閱讀「適用於 Android 開發人員的 Jetpack Compose」第一章「Compose 基礎知識」的「實作遷移作業」的 6~13 章

學習筆記

  1. Compose 不要把整個 ViewModel 傳入,只要傳子項就好
  2. LiveData 可以用observeAsState建立觀察,但發出的值可能是 null,所以要做空值判斷
    @Composable
    fun PlantDetailDescription(plantDetailViewModel: PlantDetailViewModel) {
        // Observes values coming from the VM's LiveData<Plant> field
        val plant by plantDetailViewModel.plant.observeAsState()
    
        // If plant is not null, display the content
        plant?.let {
            PlantDetailContent(it)
        }
    }
    
  3. Compose 尚不支援轉譯 HTML
  4. 真的很想在 Compose 的 text 寫 HTML 的話,可以用AndroidView在 Compose 內建立 TextView
  5. 不建議在 Fragment 中使用ComposeView
  6. ComposeView 使用DisposeOnViewTreeLifecycleDestroyed
  7. 設定主題顏色
    @Composable
    fun SunflowerTheme(
        darkTheme: Boolean = isSystemInDarkTheme(),
        content: @Composable () -> Unit
    ) {
        val lightColors  = lightColors(
            primary = colorResource(id = R.color.sunflower_green_500),
            primaryVariant = colorResource(id = R.color.sunflower_green_700),
            secondary = colorResource(id = R.color.sunflower_yellow_500),
            background = colorResource(id = R.color.sunflower_green_500),
            onPrimary = colorResource(id = R.color.sunflower_black),
            onSecondary = colorResource(id = R.color.sunflower_black),
        )
        val darkColors  = darkColors(
            primary = colorResource(id = R.color.sunflower_green_100),
            primaryVariant = colorResource(id = R.color.sunflower_green_200),
            secondary = colorResource(id = R.color.sunflower_yellow_300),
            onPrimary = colorResource(id = R.color.sunflower_black),
            onSecondary = colorResource(id = R.color.sunflower_black),
            onBackground = colorResource(id = R.color.sunflower_black),
            surface = colorResource(id = R.color.sunflower_green_100_8pc_over_surface),
            onSurface = colorResource(id = R.color.sunflower_white),
        )
        val colors = if (darkTheme) darkColors else lightColors
        MaterialTheme(
            colors = colors,
            content = content
        )
    }
    

上一篇
112/13 - Compose 基礎知識 - 實作遷移作業(上)
下一篇
112/15 - 版面配置、主題設定和動畫 - Compose 版面配置和修飾符基礎知識
系列文
一天學一篇 Google Codelabs30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言